package com.note.feng.leetcode.algorithms.easy.nine;

public class NineHundredTwentyTwo {
    /**
     * 922 按奇偶排序数组 II
     * 给定一个非负整数数组 nums，  nums 中一半整数是 奇数 ，一半整数是 偶数 。
     *
     * 对数组进行排序，以便当 nums[i] 为奇数时，i 也是 奇数 ；当 nums[i] 为偶数时， i 也是 偶数 。
     *
     * 你可以返回 任何满足上述条件的数组作为答案 。
     *
     * 示例 1：
     *
     * 输入：nums = [4,2,5,7]
     * 输出：[4,5,2,7]
     * 解释：[4,7,2,5]，[2,5,4,7]，[2,7,4,5] 也会被接受。
     * 示例 2：
     *
     * 输入：nums = [2,3]
     * 输出：[2,3]
     *
     * 提示：
     *
     * 2 <= nums.length <= 2 * 104
     * nums.length 是偶数
     * nums 中一半是偶数
     * 0 <= nums[i] <= 1000
     *
     * 进阶：可以不使用额外空间解决问题吗？
     *
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode.cn/problems/sort-array-by-parity-ii
     */
    /**
     * 解法：双指针
     * 左指针表示偶数，从 0 开始，步长 2
     * 右指针表示奇数，从 1 开始，步长 2
     * @param nums
     * @return
     */
    public int[] sortArrayByParityII(int[] nums) {
        int n = nums.length;
        int left = 0,right = 1;
        while (left < n && right < n){
            while (left < n && left % 2 == 0 && nums[left] % 2 == 0){
                left += 2;
            }
            while (right < n && right % 2 == 1 && nums[right] % 2 == 1){
                right += 2;
            }
            if(left < n && right < n){
                int t = nums[left];
                nums[left] = nums[right];
                nums[right] = t;
                left += 2;
                right += 2;
            }
        }
        return nums;
    }
}
